package com.ahdy.service;

import com.ahdy.entity.DailyMedicationTask;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 每日用药任务服务接口
 */
@Service
public interface DailyMedicationTaskService {

    /**
     * 添加每日用药任务
     *
     * @param task 每日用药任务实体
     * @return 新增任务ID
     */
    Integer addDailyMedicationTask(DailyMedicationTask task);

    /**
     * 更新任务状态
     *
     * @param id 任务ID
     * @param status 任务状态
     * @return 影响行数
     */
    int updateTaskStatus(Integer id, DailyMedicationTask.TaskStatus status);

    /**
     * 删除每日用药任务
     *
     * @param id 任务ID
     * @return 影响行数
     */
    int deleteDailyMedicationTask(Integer id);

    /**
     * 根据ID查询每日用药任务
     *
     * @param id 任务ID
     * @return 每日用药任务实体
     */
    DailyMedicationTask getDailyMedicationTaskById(Integer id);

    /**
     * 根据用户ID和日期查询每日用药任务列表
     *
     * @param userId 用户ID
     * @param taskDate 任务日期
     * @return 每日用药任务列表
     */
    List<DailyMedicationTask> getDailyMedicationTasksByUserIdAndDate(Integer userId, LocalDate taskDate);

    /**
     * 根据用户ID和日期范围查询每日用药任务列表
     *
     * @param userId 用户ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 每日用药任务列表
     */
    List<DailyMedicationTask> getDailyMedicationTasksByUserIdAndDateRange(Integer userId, LocalDate startDate, LocalDate endDate);

    /**
     * 查询指定日期未完成的每日用药任务列表
     *
     * @param taskDate 任务日期
     * @return 每日用药任务列表
     */
    List<DailyMedicationTask> getUncompletedTasksByDate(LocalDate taskDate);

    /**
     * 根据用户ID删除所有每日用药任务
     *
     * @param userId 用户ID
     * @return 影响行数
     */
    int deleteDailyMedicationTasksByUserId(Integer userId);

    /**
     * 根据计划ID删除所有每日用药任务
     *
     * @param planId 计划ID
     * @return 影响行数
     */
    int deleteDailyMedicationTasksByPlanId(Integer planId);

    /**
     * 批量添加每日用药任务
     *
     * @param tasks 每日用药任务列表
     * @return 影响行数
     */
    int batchAddDailyMedicationTasks(List<DailyMedicationTask> tasks);

    /**
     * 获取今日用药任务统计
     *
     * @param userId 用户ID
     * @return 统计信息
     */
    Map<String, Object> getTodayTaskStatistics(Integer userId);

    /**
     * 获取需要提醒的任务
     *
     * @param date 日期
     * @param currentTime 当前时间
     * @return 需要提醒的任务列表
     */
    List<DailyMedicationTask> getTasksNeedingReminder(LocalDate date, String currentTime);

    /**
     * 获取延迟服药任务（用于通知家属）
     *
     * @param date 日期
     * @param delayMinutes 延迟分钟数
     * @return 延迟服药任务列表
     */
    List<Map<String, Object>> getDelayedTasksForNotification(LocalDate date, Integer delayMinutes);
}
